home *** CD-ROM | disk | FTP | other *** search
- {
- From: JON JASIUNAS
- Subj: Cursor Stuff
-
- Here's a bit of code that will hide / unhide the cursor, without using
- assembler: }
-
- uses
- Dos;
-
- var
- R: Registers;
-
- procedure HideCursor;
- begin { HideCursor }
- R.AH := $03; {- Current cursor status }
- Intr($10, R);
- R.AH := $01; {- Set cursor }
- R.CH := R.Ch or $20;
- Intr($10, R);
- end; { HideCursor }
-
- procedure ShowCursor;
- begin { ShowCursor }
- R.AH := $03;
- Intr($10, R);
- R.AH := $01;
- R.CH := R.CH and $1F;
- Intr($10, R);
- end; { ShowCursor }
-
- { However, if you want to use assembler, you can, and you don't need the
- DOS unit. Here's my Cursor modification unit (in assembler), if you're
- interested. }
-
- {****************************
- * CURSOR.PAS v1.0 *
- * *
- * General purpose cursor *
- * manipulation routines *
- ****************************
-
- 1992-93 - HyperDrive Software
- Released into the Public Domain.}
-
- {$S-,R-,D-}
- {$IFOPT O+}
- {$F+}
- {$ENDIF}
-
- unit Cursor;
-
- {\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\}
- interface
- {/////////////////////////////////////////////////////////////////////////////}
-
- const
- csLine = $01;
- csHalf = $02;
- csBlock = $03;
-
- procedure DefineCursor(Size: Byte);
- procedure GotoXy(X, Y: Byte);
- procedure RestoreCursor;
- procedure HideCursor;
- procedure ShowCursor;
- function CursorHidden: Boolean;
-
- {\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\}
- implementation
- {/////////////////////////////////////////////////////////////////////////////}
-
- var
- dcStart, dcEnd: Byte;
-
- {=============================================================================}
-
- procedure DefineCursor(Size: Byte); ASSEMBLER;
- asm { DefineCursor }
- mov AH, $0F
- int $10
- cmp AL, $07
- jne @Color
-
- @Mono:
- mov AH, $03
- int $10
- cmp Size, csLine
- je @MonoL
- cmp Size, csHalf
- je @MonoH
- cmp Size, csBlock
- je @MonoB
- @MonoL:
- mov CH, $0C
- jmp @MonoDone
- @MonoH:
- mov CH, $07
- jmp @MonoDone
- @MonoB:
- mov CH, $00
- @MonoDone:
- mov CL, $0D
- jmp @Done
-
- @Color:
- mov AH, $03
- int $10
- cmp Size, csLine
- je @ColorL
- cmp Size, csHalf
- je @ColorH
- cmp Size, csBlock
- je @ColorB
- @ColorL:
- mov CH, $06
- jmp @ColorDone
- @ColorH:
- mov CH, $04
- jmp @ColorDone
- @ColorB:
- mov CH, $00
- @ColorDone:
- mov CL, $07
-
- @Done:
- mov AH, $01
- int $10
- end; { DefineCursor }
-
- {-----------------------------------------------------------------------------}
-
- procedure GotoXy(X, Y: Byte); ASSEMBLER;
- asm { GotoXy }
- mov AH, $0F
- int $10
- mov AH, $02
- dec Y
- mov DH, Y
- dec X
- mov DL, X
- int $10
- end; { GotoXy }
-
- {-----------------------------------------------------------------------------}
-
- procedure RestoreCursor; ASSEMBLER;
- asm { RestoreCursor }
- mov AH, $01
- mov CH, dcStart
- mov CL, dcEnd
- int $10
- end; { RestoreCursor }
-
- {-----------------------------------------------------------------------------}
-
- procedure HideCursor; ASSEMBLER;
- asm { HideCursor }
- mov AH, $03
- int $10
- mov AH, $01
- or CH, $20
- int $10
- end; { HideCursor }
-
- {-----------------------------------------------------------------------------}
-
- procedure ShowCursor; ASSEMBLER;
- asm { ShowCursor }
- mov AH, $03
- int $10
- mov AH, $01
- and CH, $1F
- int $10
- end; { ShowCursor }
-
- {-----------------------------------------------------------------------------}
-
- function CursorHidden: Boolean; ASSEMBLER;
- asm { CursorHidden }
-
- mov AH, $03
- int $10
- cmp CH, $20
- je @Hidden
- mov AL, $00
- jmp @End
- @Hidden:
- mov AL, $01;
- @End:
- end; { CursorHidden }
-
- {-----------------------------------------------------------------------------}
- {** PRIVATE **}
- {-----------------------------------------------------------------------------}
-
- procedure SaveCursor; ASSEMBLER;
- asm { SaveCursor }
- mov AH, $03
- int $10
- mov dcStart, CH
- mov dcEnd, CL
- end; { SaveCursor }
-
- {=============================================================================}
- {$F+}
-
- var
- OldExitProc: Pointer;
-
- procedure NewExitProc;
- begin
- ExitProc := OldExitProc;
- RestoreCursor; {- Restore startup cursor mode }
- end; { NewExitProc }
-
- {$F-}
- {=============================================================================}
-
- begin { Cursor }
- OldExitProc := ExitProc;
- ExitProc := @NewExitProc;
- SaveCursor; {- Save startup cursor mode }
- end. { Cursor }